#include <eepp/ui/doc/languages/perl.hpp>
#include <eepp/ui/doc/syntaxdefinitionmanager.hpp>

namespace EE { namespace UI { namespace Doc { namespace Language {

void addPerl() {

	SyntaxDefinitionManager::instance()->add(

		{ "Perl",
		  { "%.pm$", "%.pl$" },
		  {
			  { { "%#.-\n" }, "comment" },
			  { { "\"", "\"", "\\" }, "string" },
			  { { "'", "'", "\\" }, "string" },
			  { { "-?%d+[%d%.eE]*" }, "number" },
			  { { "-?%.?%d+" }, "number" },
			  { { "[%a_][%w_]*%f[(]" }, "function" },
			  { { "[%@%$%*]+[%a_][%w_]*" }, "keyword2" },
			  { { "%--[%a_][%w_]*" }, "symbol" },

		  },
		  {
			  { "if", "keyword" },
			  { "elsif", "keyword" },
			  { "else", "keyword" },
			  { "unless", "keyword" },
			  { "while", "keyword" },
			  { "until", "keyword" },
			  { "foreach", "keyword" },
			  { "for", "keyword" },
			  { "do", "keyword" },
			  { "atan2", "keyword" },
			  { "next", "keyword" },
			  { "last", "keyword" },
			  { "redo", "keyword" },
			  { "goto", "keyword" },
			  { "endhostent", "keyword" },
			  { "sysread", "keyword" },
			  { "last", "keyword" },
			  { "alarm", "keyword" },
			  { "getpwnam", "keyword" },
			  { "syscall", "keyword" },
			  { "prototype", "keyword" },
			  { "abs", "keyword" },
			  { "umask", "keyword" },
			  { "symlink", "keyword" },
			  { "dbmclose", "keyword" },
			  { "printf", "keyword" },
			  { "endpwent", "keyword" },
			  { "substr", "keyword" },
			  { "print", "keyword" },
			  { "sysseek", "keyword" },
			  { "caller", "keyword" },
			  { "sysopen", "keyword" },
			  { "getlogin", "keyword" },
			  { "-d", "keyword" },
			  { "-x", "keyword" },
			  { "chmod", "keyword" },
			  { "getpgrp", "keyword" },
			  { "study", "keyword" },
			  { "pos", "keyword" },
			  { "gethostent", "keyword" },
			  { "sort", "keyword" },
			  { "state", "keyword" },
			  { "pop", "keyword" },
			  { "seekdir", "keyword" },
			  { "gethostbyname", "keyword" },
			  { "getc", "keyword" },
			  { "-W", "keyword" },
			  { "-w", "keyword" },
			  { "eof$", "keyword" },
			  { "pack", "keyword" },
			  { "-u", "keyword" },
			  { "sprintf", "keyword" },
			  { "AUTOLOAD", "keyword" },
			  { "die", "keyword" },
			  { "-t", "keyword" },
			  { "ord", "keyword" },
			  { "-T", "keyword" },
			  { "-M", "keyword" },
			  { "split", "keyword" },
			  { "-s", "keyword" },
			  { "lcfirst", "keyword" },
			  { "open", "keyword" },
			  { "getpeername", "keyword" },
			  { "quotemeta", "keyword" },
			  { "srand", "keyword" },
			  { "-S", "keyword" },
			  { "oct", "keyword" },
			  { "format", "keyword" },
			  { "-b", "keyword" },
			  { "socketpair", "keyword" },
			  { "getgrent", "keyword" },
			  { "-R", "keyword" },
			  { "not", "keyword" },
			  { "-e", "keyword" },
			  { "-r", "keyword" },
			  { "lstat", "keyword" },
			  { "pipe", "keyword" },
			  { "flock", "keyword" },
			  { "endprotoent", "keyword" },
			  { "-X", "keyword" },
			  { "system", "function" },
			  { "select", "keyword" },
			  { "localtime", "keyword" },
			  { "index", "keyword" },
			  { "getnetbyaddr", "keyword" },
			  { "next", "keyword" },
			  { "local", "keyword" },
			  { "fork", "keyword" },
			  { "length", "keyword" },
			  { "getnetbyname", "keyword" },
			  { "setpwent", "keyword" },
			  { "shift", "keyword" },
			  { "map", "keyword" },
			  { "readline", "keyword" },
			  { "-k", "keyword" },
			  { "splice", "keyword" },
			  { "setpgrp", "keyword" },
			  { "setprotoent", "keyword" },
			  { "endservent", "keyword" },
			  { "UNITCHECK", "keyword" },
			  { "-c", "keyword" },
			  { "-f", "keyword" },
			  { "keys", "keyword" },
			  { "kill", "keyword" },
			  { "lc", "keyword" },
			  { "msgsnd", "keyword" },
			  { "dump", "keyword" },
			  { "-l", "keyword" },
			  { "-z", "keyword" },
			  { "syswrite", "keyword" },
			  { "shutdown", "keyword" },
			  { "bind", "keyword" },
			  { "CHECK", "keyword" },
			  { "setnetent", "keyword" },
			  { "sqrt", "keyword" },
			  { "setsockopt", "keyword" },
			  { "getnetent", "keyword" },
			  { "-p", "keyword" },
			  { "BEGIN", "keyword" },
			  { "waitpid", "keyword" },
			  { "-B", "keyword" },
			  { "scalar", "keyword" },
			  { "gethostbyaddr", "keyword" },
			  { "bless", "keyword" },
			  { "getprotobyname", "keyword" },
			  { "tie", "keyword" },
			  { "say", "keyword" },
			  { "each", "keyword" },
			  { "telldir", "keyword" },
			  { "recv", "keyword" },
			  { "chr", "keyword" },
			  { "getpwuid", "keyword" },
			  { "getservbyname", "keyword" },
			  { "return", "keyword" },
			  { "rename", "keyword" },
			  { "getservbyport", "keyword" },
			  { "unshift", "keyword" },
			  { "truncate", "keyword" },
			  { "getservent", "keyword" },
			  { "ucfirst", "keyword" },
			  { "rindex", "keyword" },
			  { "time", "keyword" },
			  { "chdir", "keyword" },
			  { "chown", "keyword" },
			  { "unlink", "keyword" },
			  { "getpwent", "keyword" },
			  { "undef", "keyword" },
			  { "cos", "keyword" },
			  { "utime", "keyword" },
			  { "END", "keyword" },
			  { "unpack", "keyword" },
			  { "untie", "keyword" },
			  { "semop", "keyword" },
			  { "setgrent", "keyword" },
			  { "getsockname", "keyword" },
			  { "ioctl", "keyword" },
			  { "getprotoent", "keyword" },
			  { "times", "keyword" },
			  { "defined", "keyword" },
			  { "opendir", "keyword" },
			  { "use", "keyword" },
			  { "readpipe", "keyword" },
			  { "chomp", "keyword" },
			  { "sub", "keyword" },
			  { "rmdir", "keyword" },
			  { "delete", "keyword" },
			  { "gmtime", "keyword" },
			  { "connect", "keyword" },
			  { "join", "keyword" },
			  { "grep", "keyword" },
			  { "DESTROY", "keyword" },
			  { "read", "keyword" },
			  { "sethostent", "keyword" },
			  { "fileno", "keyword" },
			  { "redo", "keyword" },
			  { "hex", "keyword" },
			  { "int", "keyword" },
			  { "ref", "keyword" },
			  { "INIT", "keyword" },
			  { "semget", "keyword" },
			  { "close", "keyword" },
			  { "SUPER", "keyword" },
			  { "reset", "keyword" },
			  { "warn", "keyword" },
			  { "glob", "keyword" },
			  { "closedir", "keyword" },
			  { "goto", "keyword" },
			  { "rewinddir", "keyword" },
			  { "tied", "keyword" },
			  { "push", "keyword" },
			  { "getsockopt", "keyword" },
			  { "readlink", "keyword" },
			  { "require", "keyword" },
			  { "getprotobynumber", "keyword" },
			  { "crypt", "keyword" },
			  { "tell", "keyword" },
			  { "exists", "keyword" },
			  { "getgrgid", "keyword" },
			  { "getpriority", "keyword" },
			  { "send", "keyword" },
			  { "rand", "keyword" },
			  { "chroot", "keyword" },
			  { "seek", "keyword" },
			  { "sleep", "keyword" },
			  { "shmctl", "keyword" },
			  { "sin", "keyword" },
			  { "semctl", "keyword" },
			  { "exit", "function" },
			  { "getppid", "keyword" },
			  { "-O", "keyword" },
			  { "shmget", "keyword" },
			  { "accept", "keyword" },
			  { "my", "keyword" },
			  { "shmwrite", "keyword" },
			  { "uc", "keyword" },
			  { "setpriority", "keyword" },
			  { "write", "keyword" },
			  { "vec", "keyword" },
			  { "-A", "keyword" },
			  { "getgrnam", "keyword" },
			  { "exec", "function" },
			  { "-o", "keyword" },
			  { "msgctl", "keyword" },
			  { "msgget", "keyword" },
			  { "mkdir", "keyword" },
			  { "eval", "keyword" },
			  { "wait", "keyword" },
			  { "fcntl", "keyword" },
			  { "-g", "keyword" },
			  { "values", "keyword" },
			  { "binmode", "keyword" },
			  { "reverse", "keyword" },
			  { "msgrcv", "keyword" },
			  { "socket", "keyword" },
			  { "link", "keyword" },
			  { "setservent", "keyword" },
			  { "wantarray", "keyword" },
			  { "dbmopen", "keyword" },
			  { "shmread", "keyword" },
			  { "endnetent", "keyword" },
			  { "readdir", "keyword" },
			  { "-C", "keyword" },
			  { "package", "keyword" },
			  { "endgrent", "keyword" },
			  { "our", "keyword" },
			  { "stat", "keyword" },
			  { "chop", "keyword" },
			  { "listen", "keyword" },
			  { "log", "keyword" },
			  { "formline", "keyword" },

		  },
		  "#",
		  { "^#!.*[ /]perl" }

		} );
}

}}}} // namespace EE::UI::Doc::Language
